package edu.yang.dbutils.result;

import edu.yang.dbutils.ResultSetHandler;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * 抽象的集合结果集处理器
 * @author yang
 * @date 2024-05-12
 */
public abstract class AbstractListHandler<T> implements ResultSetHandler<List<T>> {
    /**
     * 处理集合（使用模板方法模式）
     * @param rs 结果集对象
     * @return
     * @throws SQLException
     */
    @Override
    public List<T> handle(ResultSet rs) throws SQLException {
        List<T> list = new ArrayList<>();
        while (rs.next()){
            list.add(handleRow(rs));
        }
        return list;
    }

    /**
     * 抽象行处理方法，交由子类做不同的实现
     * @param rs
     * @return
     * @throws SQLException
     */
    public abstract T handleRow(ResultSet rs) throws SQLException;
}
